// 从 URL 和路径模块中导入必要的功能
import fs from "fs";
import path, { dirname } from "path";
import { fileURLToPath } from "url";

// 从 ESLint 插件中导入推荐配置
import pluginJs from "@eslint/js";
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
import pluginVue from "eslint-plugin-vue";
import globals from "globals";
import tseslint from "typescript-eslint";

// 使用 import.meta.url 获取当前模块的路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

// 读取 .auto-import.json 文件的内容，并将其解析为 JSON 对象
const autoImportConfig = JSON.parse(
  fs.readFileSync(path.resolve(__dirname, ".auto-import.json"), "utf-8"),
);

export default [
  // 指定文件匹配规则
  {
    files: ["**/*.{js,mjs,cjs,ts,vue}"],
  },
  // 指定全局变量和环境
  {
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.node,
      },
    },
  },
  // 扩展配置
  pluginJs.configs.recommended,
  ...tseslint.configs.recommended,
  ...pluginVue.configs["flat/essential"],
  // 自定义规则
  {
    // 针对所有 JavaScript、TypeScript 和 Vue 文件应用以下配置
    files: ["**/*.{js,mjs,cjs,ts,vue}"],

    languageOptions: {
      globals: {
        // 合并从 autoImportConfig 中读取的全局变量配置
        ...autoImportConfig.globals,
        // TypeScript 全局命名空间
        Api: "readonly",
        Form: "readonly",
        WMS: "readonly",
      },
    },
    rules: {
      quotes: ["error", "single"], // 使用单引号
      semi: ["error", "never"], // 语句末尾不加分号
      "no-var": "error", // 要求使用 let 或 const 而不是 var
      "@typescript-eslint/no-explicit-any": "off", // 禁用 any 检查
      "@typescript-eslint/no-namespace": "off", // 允许使用命名空间
      "@typescript-eslint/no-unused-vars": [
        "warn",
        {
          argsIgnorePattern: "^_",
          varsIgnorePattern: "^_",
          ignoreRestSiblings: true,
        },
      ], // 未使用变量警告
      "vue/multi-word-component-names": "off", // 禁用对 Vue 组件名称的多词要求检查
      "vue/no-unused-vars": ["warn", { ignorePattern: "^_" }], // Vue未使用变量警告
      "no-multiple-empty-lines": ["warn", { max: 1 }], // 不允许多个空行
      "no-unexpected-multiline": "error", // 禁止空余的多行
    },
  },
  // vue 规则
  {
    files: ["**/*.vue"],
    languageOptions: {
      parserOptions: { parser: tseslint.parser },
    },
  },
  // 忽略文件
  {
    ignores: [
      "node_modules",
      "dist",
      "public",
      ".vscode/**",
      "src/assets/**",
      "src/utils/console.ts",
    ],
  },
  // prettier 配置
  eslintPluginPrettierRecommended,
];
